package ThreadDemo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 34255
 * Date: 2024-10-20
 * Time: 18:35
 */
//使用懒汉模式实现单例设计模式
//该模式在多线程下存在线程安全隐患
//解决办法：加锁
public class SingletonLazy {
    private volatile static SingletonLazy lazy;//避免内存不可见/指令重排序问题

    public static SingletonLazy getSingletonLazy(){
        //判断和赋值操作是不可分割的，应当看成一个操作，即原子
        if(lazy == null){
            synchronized(SingletonLazy.class){
                if(lazy == null){
                    lazy = new SingletonLazy();
                    //1.开辟堆空间
                    //2.构造方法初始化堆空间
                    //3.将空间地址赋值给lazy
//多线程环境下
                    //1.开辟堆空间
                    //2.将空间地址赋值给lazy
                    //3.构造方法初始化堆空间
                }
            }
        }
        return lazy;
    }

    private SingletonLazy(){

    }
}
